package com.redsun.smallworld.frame;


import com.jogamp.opengl.util.texture.Texture;
import com.redsun.smallworld.gl.glcontroller.ControlController;
import com.redsun.smallworld.gl.glcontroller.DisPlayController;
import com.redsun.smallworld.gl.glcontroller.TextureController;
import com.redsun.smallworld.ob.services.MemoryService;


import javax.media.opengl.*;
import javax.media.opengl.awt.GLCanvas;
import javax.media.opengl.glu.GLU;
import javax.swing.JFrame;
import java.nio.IntBuffer;
//import com.sun.opengl.util.Animator;
//import com.sun.opengl.util.texture.Texture;
/**
 * Created by zhebinwang on 2017/6/1.
 */
public class MainFrame implements GLEventListener {
    private final GLU glu = new GLU();
    private Texture texture;

    @Override
    public void display(GLAutoDrawable arg0) {
        // method body
        //GL2.GL_IMAGE_2D;
        GL2 gl2=arg0.getGL().getGL2();

        gl2.glClear(GL.GL_COLOR_BUFFER_BIT | GL.GL_DEPTH_BUFFER_BIT); // 填充背景颜色

        gl2.glColor3f(255.0f, 255.0f, 255.0f); // 设置GL的画图颜色，也就是画刷的颜色

        /**
         * 如果您在您的场景中使用多个纹理，您应该使用来
         * glBindTexture(GL_TEXTURE_2D, texture_int[ 所使用纹理对应的数字 ])
         * 选择要绑定的纹理。当您想改变纹理时，应该绑定新的纹理。
         * 有一点值得指出的是，您不能在 glBegin() 和 glEnd() 之间绑定纹理，
         * 必须在 glBegin() 之前或 glEnd() 之后绑定。
         */


        //调用循环内容
        DisPlayController.getInterface().displayCycle( gl2);
        ControlController.getInterface().doRenderAll(gl2);

        //gl2.glFlush();

    }
    @Override
    public void dispose(GLAutoDrawable arg0) {
        //method body
    }

    @Override
    public void init(GLAutoDrawable arg0) {
        // method body
        GL2 gl2=arg0.getGL().getGL2();

        //gl2 = arg0.getGL();
        gl2.glClearColor(255.0f, 255.0f, 255.0f, 1f); // 设置背景颜色
        // gl.glViewport(0, 0, 100, 100); // 视点大小,一个视口时候没必要用这个
        gl2.glMatrixMode(GL2.GL_PROJECTION);
        gl2.glLoadIdentity();
        glu.gluOrtho2D(0, 100, 0.0, 100.0); // 使坐标系统出现在GL里，此时屏幕中最左面是坐标0，右面是100，最下0，嘴上100

        gl2.glEnable(GL.GL_TEXTURE_2D);// 开启纹理
        //启用5个纹理
        gl2.glGenTextures(5, IntBuffer.wrap(TextureController.textureid));

        //初始化读入所有纹理内容
        TextureController.getInterface().initTexture(gl2);
        //初始化控件内容
        ControlController.getInterface().initControl();
        //初始化场景内容
        DisPlayController.getInterface().initScene();
    }
    @Override
    public void reshape(GLAutoDrawable arg0, int arg1, int arg2, int arg3,int arg4) {
        // method body
    }
    public static void main(String[] args) {
        //getting the capabilities object of GL2 profile

        MemoryService.getintface().doLoadKnight();
        MemoryService.getintface().doLoadCity();



        final GLProfile profile = GLProfile.get(GLProfile.GL2);
        GLCapabilities capabilities = new GLCapabilities(profile);
        // The canvas
        final GLCanvas glcanvas = new GLCanvas(capabilities);
        MainFrame b = new MainFrame();
        glcanvas.addGLEventListener(b);
        glcanvas.setSize(500, 500);
        //creating frame
        final JFrame frame = new JFrame (" Basic Frame");
        //adding canvas to frame
        frame.getContentPane().add(glcanvas);
        frame.setSize(frame.getContentPane().getPreferredSize());
        frame.setVisible(true);

        //
        //第二次提交

        MemoryService.getintface().doLogShowKnightInfo();

    }


}